#pragma once

using namespace System;
using namespace System::Collections;
using namespace System::IO;

// Basic container for quicktime format
public ref struct Atom
{
	__int64 Size;
	String^ Type;
	//long ExtendedSize;
	ArrayList^ Children;
	array<unsigned char>^ Data;
};

// movie header
public ref struct mvhd
{
};
// track header
public ref struct tkhd
{
	unsigned char version;
	/*
		Track enabled
		Indicates that the track is enabled. Flag value is 0x0001.
		Track i nmovie
		Indicates that the track is used in the movie. Flag value is 0x0002.
		Track in preview
		Indicatesthatthetrackis used int he movies preview. Flag value is 0x0004.
		Track in poster
		Indicates that the track is used in the movies poster. Flag value is 0x0008.
	*/
	array<unsigned char>^ flags; // 3 Bytes
	// in seconds since midnight, January 1,1904 when the track header was changed.
	unsigned int creationTime;
	unsigned int modificationTime;
	// >0 unique
	int trackID;
	// =0, internal use for apple
	int reserved1;
	/*
		Atimevalue that indicates the duration of this track (in the movies time-coordinatesystem).
		Note that this property is derived from the tracks edits. The value of this field is equal to the
		sum of the durations of all of the tracks edits.If there is no editlist, then the duration is the
		sum of the sample durations, converted into the movie timescale.
	*/
	int duration;
	// =0, internal use for apple
	array<unsigned char>^ reserved2; // 8 Bytes
	// track overlay z-depth -> lower value means in front
	short layer;
	// alternate racks can be used for quality, language, ...
	short alternateGroup;
	// =0 reserved for apple
	short reserved3;
	// transformation matrix for this track
	array<float>^ displayMatrix; // 3x3
	int trackWidth;
	int trackHeights;
};

//
public ref struct elst
{
};

//
public ref struct tref
{
};

//
public ref struct mdhd
{
};

//
public ref struct hdlt
{
};

// vmhd?
public ref struct gmhd
{
};

//
public ref struct hdlr
{
};

//
public ref struct dref
{
};

//
public ref struct stsd
{
};

//
public ref struct stts
{
};

//
public ref struct stsc
{
};

//
public ref struct stsz
{
};

//
public ref struct stco
{
};